import axios from 'axios'
import store from '@/store' // 不是vue文件 要是用vuex 直接导入store对象
// create an axios instance
import { Message } from 'element-ui'
// import { removeToken } from './auth'
// import router from '@/router'
const service = axios.create({
  // 最好不要删除，她会根据运行的命令来决定加载哪个环境变量
  // 开发基地址：一个，上线的线上基地址是另一个
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // 统一携带token 判断是否有token
    const token = store.getters.token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  response => { // 默认2xx,3xx开头的响应状态码进入这里-返回成功
    // 后台返回接口2种
    // http状态码 来决定成功/失败
    // const success = response.data.success // 用一下解构赋值
    const { success, message } = response.data // 把后台返回的数据对象，解构赋值
    if (success) return response.data // success返回的true那是真用户  返回响应内容
    else { // 失败了账号或密码错误 返回Promise错误提示
      Message.error(message) // 统一提示(必须提示), 成功可以在外面自行决定是否提示.成功数据外面也要使用
      return Promise.reject(message) // response.data.message
    }
  },
  // 因为后台设置好了 无论对错都返回的是200状态码 而只有当状态码为3xx,4xx时，才走error，所以下方的程序是进不去的
  error => {
    Message.error(error)
    console.dir(error)
    // error.response && error.response.data && error.response.data.code === 10002
    if (error?.response?.data?.code === 10002) { // 401 token过期
      // removeToken() // 删除本地token
      // store.commit('user/REMOVE_TOKEN') // 删除 vuex中的token
      // router.replace('/login')
      // 直接调用user里actions清除token跳转的方法
      store.dispatch('user/logOutActions')
    }
    return Promise.reject(error)
  }
)

export default service
